package com.stark.wechat.service.impl;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Service;

import net.sf.ehcache.Cache;

/**
 * Ehcache 缓存业务逻辑。
 * @author Ben
 * @since 1.0.0
 * @version 1.0.0, 2017/8/6
 */
@Service("ehcacheService")
public class EhcacheServiceImpl {
	@Autowired
	private EhCacheCacheManager cacheManager;
	
	/**
	 * 清空指定命名空间下所有缓存。
	 * @param cacheName 命名空间。
	 */
	public void clear(String cacheName) {
		if (!StringUtils.isBlank(cacheName)) {
			Cache cache = this.cacheManager.getCacheManager().getCache(cacheName);
			if (null != cache) {
				cache.removeAll();
			}
		}
	}
	
	/**
	 * 获取指定命名空间中所有的键值对。
	 * @param cacheName 命名空间。
	 * @return {@link HashMap} 。
	 */
	public Map<String, Object> getCacheMap(String cacheName) {
		Cache cache = this.cacheManager.getCacheManager().getCache(cacheName);
		Map<String, Object> map = new HashMap<>();
		for (Object key : cache.getKeys()) {
			map.put((String) key, cache.get(key).getObjectValue());
		}
		return map;
	}
}
